home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 4 / Amiga Tools 4.iso / tools / netzwerk / magplip / source / track.c < prev   
C/C++ Source or Header  |  1996-02-26  |  4KB  |  160 lines

  1. /*
  2. ** $VER: track.c 1.3 (30 Aug 1995)
  3. **
  4. ** magplip.device - Parallel Line Internet Protocol
  5. **
  6. ** Original code written by Oliver Wagner and Michael Balzer.
  7. **
  8. ** This version has been completely reworked by Marius Gröger,
  9. ** introducing slight protocol changes. The new source is
  10. ** a lot better organized and maintainable.
  11. **
  12. ** (C) Copyright 1993-1994 Oliver Wagner & Michael Balzer
  13. ** (C) Copyright 1995 Jan Kratochvil & Martin Mares
  14. ** (C) Copyright 1995 Marius Gröger
  15. **     All Rights Reserved
  16. **
  17. ** $HISTORY:
  18. **
  19. ** 30 Aug 1995 : 001.003 :  minor declaration related changes
  20. ** 05 Mar 1995 : 001.001 :  couldn't any longer stand the original, unstructured code
  21. ** 12 Feb 1995 : 001.000 :  reworked original
  22. */
  23.  
  24. /*F*/ /* includes */
  25. #ifndef CLIB_EXEC_PROTOS_H
  26. #include <clib/exec_protos.h>
  27. #include <pragmas/exec_sysbase_pragmas.h>
  28. #endif
  29.  
  30. #ifndef EXEC_MEMORY_H
  31. #include <exec/memory.h>
  32. #endif
  33. #ifndef EXEC_LISTS_H
  34. #include <exec/lists.h>
  35. #endif
  36. #ifndef EXEC_NODES_H
  37. #include <exec/nodes.h>
  38. #endif
  39.  
  40. #ifndef _STRING_H
  41. #include <string.h>
  42. #endif
  43.  
  44. #ifndef __MAGPLIP_H
  45. #include "magplip.h"
  46. #endif
  47.  
  48. #ifndef __DEBUG_H
  49. #include "debug.h"
  50. #endif
  51.  
  52. /*E*/
  53.  
  54. /*F*/ /* exports */
  55. PUBLIC BOOL addtracktype(BASEPTR, ULONG type);
  56. PUBLIC BOOL remtracktype(BASEPTR, ULONG type);
  57. PUBLIC VOID dotracktype(BASEPTR, ULONG type, ULONG ps, ULONG pr, ULONG bs, ULONG br, ULONG pd);
  58. PUBLIC BOOL gettrackrec(BASEPTR, ULONG type, APTR info);
  59. PUBLIC VOID freetracktypes(BASEPTR);
  60. /*E*/
  61.  
  62. /*F*/ /* private */
  63. PRIVATE struct TrackRec *findtracktype(BASEPTR, ULONG type);
  64. /*E*/
  65.  
  66. /*F*/ PRIVATE struct TrackRec *findtracktype(BASEPTR, ULONG type)
  67. {
  68.    struct TrackRec * tr;
  69.  
  70.    for (tr = (struct TrackRec *) pb->pb_TrackList.lh_Head; tr->tr_Link.mln_Succ;
  71.                                                       tr = (struct TrackRec *) tr->tr_Link.mln_Succ)
  72.    {
  73.       if( tr->tr_PacketType == type )
  74.          return( tr );
  75.    }
  76.  
  77.    return( NULL );
  78. }
  79. /*E*/
  80. /*F*/ PUBLIC BOOL addtracktype(BASEPTR, ULONG type)
  81. {
  82.    struct TrackRec *tr;
  83.    BOOL rv = FALSE;
  84.  
  85.    ObtainSemaphore(&pb->pb_TrackListSem);
  86.    if (!(tr = findtracktype(pb, type)))
  87.    {
  88.       if (tr = AllocVec(sizeof(*tr), MEMF_CLEAR))
  89.       {
  90.          tr->tr_PacketType = type;
  91.          AddTail((struct List*)&pb->pb_TrackList, (struct Node *)tr);
  92.          rv = TRUE;
  93.       }
  94.    }
  95.    ReleaseSemaphore(&pb->pb_TrackListSem);
  96.  
  97.    return rv;
  98. }
  99. /*E*/
  100. /*F*/ PUBLIC BOOL remtracktype(BASEPTR, ULONG type)
  101. {
  102.    struct TrackRec *tr;
  103.    BOOL rv = FALSE;
  104.  
  105.    ObtainSemaphore( &pb->pb_TrackListSem );
  106.    if (tr = findtracktype(pb, type))
  107.    {
  108.       Remove((struct Node *)tr);
  109.       FreeVec(tr);
  110.       rv = TRUE;
  111.    }
  112.    ReleaseSemaphore( &pb->pb_TrackListSem );
  113.  
  114.    return rv;
  115. }
  116. /*E*/
  117. /*F*/ PUBLIC VOID dotracktype(BASEPTR, ULONG type, ULONG ps, ULONG pr, ULONG bs, ULONG br, ULONG pd)
  118. {
  119.    struct TrackRec * tr;
  120.  
  121.    ObtainSemaphore(&pb->pb_TrackListSem);
  122.    if (tr = findtracktype(pb, type))
  123.    {
  124.       tr->tr_Sana2PacketTypeStats.PacketsSent += ps;
  125.       tr->tr_Sana2PacketTypeStats.PacketsReceived += pr;
  126.       tr->tr_Sana2PacketTypeStats.BytesSent += bs;
  127.       tr->tr_Sana2PacketTypeStats.BytesReceived += br;
  128.       tr->tr_Sana2PacketTypeStats.PacketsDropped += pd;
  129.    }
  130.    ReleaseSemaphore(&pb->pb_TrackListSem);
  131. }
  132. /*E*/
  133. /*F*/ PUBLIC BOOL gettrackrec(BASEPTR, ULONG type, APTR info)
  134. {
  135.    struct TrackRec * tr;
  136.    BOOL rv = FALSE;
  137.  
  138.    ObtainSemaphoreShared( &pb->pb_TrackListSem );
  139.    if (tr = findtracktype(pb, type))
  140.    {
  141.       memcpy(info, &tr->tr_Sana2PacketTypeStats, sizeof(tr->tr_Sana2PacketTypeStats));
  142.       rv = TRUE;
  143.    }
  144.    ReleaseSemaphore( &pb->pb_TrackListSem );
  145.  
  146.    return rv;
  147. }
  148. /*E*/
  149. /*F*/ PUBLIC VOID freetracktypes(BASEPTR)
  150. {
  151.    struct Node *tr;
  152.  
  153.    ObtainSemaphore(&pb->pb_TrackListSem);
  154.    while(tr = RemHead((struct List*)&pb->pb_TrackList))
  155.       FreeVec(tr);
  156.    ReleaseSemaphore(&pb->pb_TrackListSem);
  157. }
  158. /*E*/
  159.  
  160.